/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_demo.gui._04_abstract._0;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;
import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import cz.pecinovsky.english.pojj.adv_framework.game_gui.IPlaceG;

import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04;
import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04_Pane;

import java.util.Collection;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;



/*******************************************************************************
 * Instance třídy {@code BagPane_2} představují oblast GUI,
 * v níž se zborazující objekty nacházející se v aktuálním prostoru,
 * tj. v prostoru, kde se právě nachází hráč.
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
@SuppressWarnings("serial")
class ObjectPane extends Box implements IGUI_04_Pane
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** Odstup mezi jednotlivými prvky panelu. */
    private final int verticalDistance;

    /** GUI, které daný panel používá. */
    protected final IGUI_04 gui;

    /** Návěští v panelu objektů specifikující obsah daného panelu. */
    private final JLabel title = new JLabel("===== Objekty =====");



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

    /** Aktuálně provozovaná hra. */
    private IGameG game;



//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří nový panel pro zobrazování objektů v aktuálním prostoru.
     *
     * @param gui               GUI, které bude daný panel používat
     * @param verticalDistance  Odstup mezi jednotlivými prvky panelu
     */
    ObjectPane(IGUI_04 gui, int verticalDistance)
    {
        super(BoxLayout.Y_AXIS);
        this.gui = gui;
        this.verticalDistance = verticalDistance;
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Inicializuje oblast zobrazující objekty v aktuálním prostoru.
     */
    @Override
    public void initialize()
    {
        removeAll();
        add(title);
        game = gui.getGame();
    }


    /***************************************************************************
     * Aktualizuje oblast zobrazující objekty v aktuálním prostoru.
     */
    @Override
    public void update()
    {
        initialize();

        IPlaceG actualPlace = game.getActualPlace();
        Collection<? extends IObjectG> objects = actualPlace.getObjects();
        for (IObjectG object : objects) {
            add(Box.createVerticalStrut(verticalDistance));
            String objectName = object.getName();
            JLabel objectLabel = new JLabel(objectName);
            add(objectLabel);
        }
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        BagPane_2 inst = new BagPane_2();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
